package com.swan.web.auto.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zongf
 * @date 2025-02-08
 **/
@Data
@ConfigurationProperties("swan.web")
public class WebConfig {

    /** 异常配置 */
    private ExceptionConfig exception = new ExceptionConfig();

    /** logback 配置*/
    private LogbackConfig logback = new LogbackConfig();

    /** 请求配置*/
    private HttpLogConfig httpLog = new HttpLogConfig();

    /** 响应配置*/
    private ResponseConfig response = new ResponseConfig();

    @Data
    public static class ExceptionConfig {

        /** 是否开启全局异常捕获 */
        private Boolean enable = true;

        /** 未知异常时返回 code 码，默认为 -1 */
        private Integer unknownCode = -1;

        /** 未知异常时返回 message 信息，默认为 未知系统异常 */
        private String unknownMessage = "未知系统异常";

    }

    @Data
    public static class LogbackConfig {

        /** 是否启用 logId 注入*/
        private Boolean injectLogId = true;

        /** logId 字段名称*/
        private String logIdName = "LOG_ID";

    }

    @Data
    public static class HttpLogConfig {

        /** 是否打印 Http 请求日志 */
        private Boolean enable = true;

        /** Controller 所在工程包, 比如 com.falcon.user.controller, 输入 com.falcon 即可。默认对所有包下的 xxController 生效*/
        private String controllerPackage = "*";

        /** 是否打印响应参数 */
        private Boolean logResponse = true;

        /** 忽略的请求地址前缀, 采用前缀匹配 */
        private List<String> ignoreUriPrefixes = new ArrayList<>();

        /** 拦截器顺序 */
        private int interceptorOrder = -100;

    }

    @Data
    public static class ResponseConfig {

        /** 响应头中 logId 字段名 */
        private String headerLogId = "X-Log-Id";

    }
}
